package com.pro.weixin.api.accessToken;

import com.pro.weixin.main.MenuManager;
import com.pro.weixin.pojo.AccessToken;
import com.pro.weixin.util.WeixinUtil;

import net.sf.json.JSONObject;

/**
 Access_token解决方案：
   
 access_token的有效期目前为2个小时。
   需定时刷新，重复获取将导致上次获取的access_token失效。
   每天只能生成access_token不超过2000次。（2000次）
   access_token的存储至少要保留512个字符空间。
 */
public class AccessTokenThread extends Thread {
	public static String ACCESS_TOKEN_VAL;//供外部访问的access_token字符串
	
	public void run() {
		while(true){
			
			AccessToken accessToken=AccessTokenThread.getAccessToken(MenuManager.appId,MenuManager.appSecret);
			ACCESS_TOKEN_VAL=accessToken.getToken();
			try {
				//  1000=1S    1000*60*60*2
				Thread.sleep(1000*5600); //我们服务器和微信服务器 请求访问响应也需要一点时间
	//			System.out.println("生成新的access_token是："+ACCESS_TOKEN_VAL);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	/**
	 * 获取access_token
	 * 
	 * @param appid 凭证
	 * @param appsecret 密钥
	 * @return
	 */
	private static String ACCESS_TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
	private static AccessToken getAccessToken(String appid, String appsecret) {
		AccessToken accessToken = null;

		String requestUrl = ACCESS_TOKEN_URL.replace("APPID", appid).replace("APPSECRET", appsecret);
		JSONObject jsonObject = WeixinUtil.httpRequest(requestUrl, "GET", null);
		System.out.println("获取凭证："+jsonObject.toString());
		// 如果请求成功
		if (null != jsonObject) {
			try {
				accessToken = new AccessToken();
				accessToken.setToken(jsonObject.getString("access_token"));
				accessToken.setExpiresIn(jsonObject.getInt("expires_in"));
				
			//	System.out.println(accessToken.getExpiresIn());
			} catch (Exception e) {
				accessToken = null;
				// 获取token失败
			}
		}
		return accessToken;
	}
}
